#include "custom_display.h"

#include "assets/lang_config.h"

#define TAG "CustomLcdDisplay"

LV_FONT_DECLARE(font_puhui_14_1);
LV_FONT_DECLARE(font_awesome_20_4);
// LV_FONT_DECLARE(font_puhui_30_4);
// LV_FONT_DECLARE(font_awesome_20_4);

CustomLcdDisplay::CustomLcdDisplay(esp_lcd_panel_io_handle_t io_handle,
                                   esp_lcd_panel_handle_t panel_handle,
                                   int width, int height, int offset_x,
                                   int offset_y, bool mirror_x, bool mirror_y,
                                   bool swap_xy)
    : SpiLcdDisplay(io_handle, panel_handle, width, height, offset_x, offset_y,
                    mirror_x, mirror_y, swap_xy,
                    {
                        .text_font = &font_puhui_14_1,
                        .icon_font = &font_awesome_20_4,
                        .emoji_font = font_emoji_32_init(),
                    }) {

  DisplayLockGuard lock(this);
  // lv_obj_set_size(status_bar_, LV_HOR_RES,
  //                 fonts_.text_font->line_height * 2 + 10);
  // lv_obj_set_style_layout(status_bar_, LV_LAYOUT_NONE, 0);
  // lv_obj_set_style_pad_top(status_bar_, 10, 0);
  // lv_obj_set_style_pad_bottom(status_bar_, 1, 0);

  // // 针对圆形屏幕调整位置
  // //      network  battery  mute     //
  // //               status            //
  // lv_obj_align(battery_label_, LV_ALIGN_TOP_MID,
  //              -2.5 * fonts_.icon_font->line_height, 0);
  // lv_obj_align(network_label_, LV_ALIGN_TOP_MID,
  //              -0.5 * fonts_.icon_font->line_height, 0);
  // lv_obj_align(mute_label_, LV_ALIGN_TOP_MID,
  //              1.5 * fonts_.icon_font->line_height, 0);

  // lv_obj_align(status_label_, LV_ALIGN_BOTTOM_MID, 0, 0);
  // lv_obj_set_flex_grow(status_label_, 0);
  // lv_obj_set_width(status_label_, LV_HOR_RES * 0.75);
  // lv_label_set_long_mode(status_label_, LV_LABEL_LONG_SCROLL_CIRCULAR);

  // lv_obj_align(notification_label_, LV_ALIGN_BOTTOM_MID, 0, 0);
  // lv_obj_set_width(notification_label_, LV_HOR_RES * 0.75);
  // lv_label_set_long_mode(notification_label_, LV_LABEL_LONG_SCROLL_CIRCULAR);

  // lv_obj_align(low_battery_popup_, LV_ALIGN_BOTTOM_MID, 0, -20);
  // lv_obj_set_style_bg_color(low_battery_popup_, lv_color_hex(0xFF0000), 0);
  // lv_obj_set_width(low_battery_label_, LV_HOR_RES * 0.75);
  // lv_label_set_long_mode(low_battery_label_, LV_LABEL_LONG_SCROLL_CIRCULAR);

      // 创建一个容器作为 Flex 布局的父对象
      lv_obj_t* btn_container = lv_obj_create(content_);
      lv_obj_set_size(btn_container, lv_pct(100), LV_SIZE_CONTENT); // 设置宽度为父对象的 100%，高度自适应内容
   //    lv_obj_set_style_bg_color(btn_container, lv_color_hex(0x0000FF), 0); // 设置背景为蓝色
      lv_obj_set_style_bg_opa(btn_container, LV_OPA_TRANSP, 0);
      lv_obj_set_style_pad_all(btn_container, 0, 0); // 设置一些内边距

      // 使容器启用 Flex 布局
      lv_obj_set_flex_flow(btn_container, LV_FLEX_FLOW_ROW); // 设置为行布局
      lv_obj_set_flex_align(btn_container, LV_FLEX_ALIGN_SPACE_AROUND, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER); // 设置子元素的对齐方式

      // 创建播放按钮
      lv_obj_t* play_btn = lv_btn_create(btn_container);
      lv_obj_add_event_cb(play_btn, [](lv_event_t * e) {
           lv_event_code_t code = lv_event_get_code(e);
           if (code == LV_EVENT_CLICKED) {
               ESP_LOGI(TAG, "Button clicked");
               auto& app = Application::GetInstance();
               app.ToggleChatState();
           }
       }, LV_EVENT_ALL, NULL);
      lv_obj_set_style_bg_opa(play_btn, LV_OPA_COVER, 0); // 确保按钮背景不透明
      lv_obj_set_style_bg_color(play_btn, lv_color_hex(0x4682B4), 0); // 可以设置按钮自身的背景色，这里设置为钢青色
      lv_obj_set_style_radius(play_btn, 5, 0);
      lv_obj_set_style_border_width(play_btn, 0, 0);
      lv_obj_set_style_pad_all(play_btn, 10, 0);
      lv_obj_t* play_button_label = lv_label_create(play_btn);
      lv_label_set_text(play_button_label, "Clicked Me");
      lv_obj_set_style_text_color(play_button_label, lv_color_hex(0xFFFFFF), 0); // 设置文字颜色为白色
      lv_obj_center(play_button_label);

  /* ===========================================自定义UI===========================================================
   */
      arc = lv_arc_create(lv_screen_active());
      lv_obj_set_size(arc, 240, 240);                  // 弧形尺寸
      lv_obj_center(arc);                              // 居中
      lv_arc_set_rotation(arc, 270);                   // 起始角度调整到顶部
      lv_arc_set_bg_angles(arc, 0, 360);               // 背景圆环完整
      lv_arc_set_angles(arc, 0, 360);                  // 初始进度完整
      lv_obj_remove_style(arc, nullptr, LV_PART_KNOB); // 不显示旋钮
      lv_obj_remove_flag(arc, LV_OBJ_FLAG_CLICKABLE);  // 不可点击
      lv_arc_set_value(arc, 0); 

      // 设置弧形样式（进度条部分）
      lv_obj_set_style_arc_width(arc, 10, LV_PART_INDICATOR);
      lv_obj_set_style_arc_color(arc, lv_color_hex(0xFF0000),
                                LV_PART_INDICATOR); // 红色进度条
      lv_obj_set_style_arc_opa(arc, LV_OPA_100,
                              LV_PART_INDICATOR); // 确保进度条不透明

      // 设置背景圆环样式（完全透明）
      lv_obj_set_style_arc_width(arc, 0, LV_PART_MAIN);      // 背景弧宽度为 0
      lv_obj_set_style_arc_opa(arc, LV_OPA_0, LV_PART_MAIN); // 背景弧透明
      lv_obj_set_style_bg_opa(arc, LV_OPA_0, LV_PART_MAIN);  // 对象背景透明

      // 创建时间标签
      time_label = lv_label_create(lv_screen_active());
      lv_label_set_text(time_label, "");
      lv_obj_align(time_label, LV_ALIGN_CENTER, 0, -80);
      // 设置字体（确保已包含 montserrat 字体）
      lv_obj_set_style_text_font(time_label, &font_awesome_20_4, 0);
  /* ===========================================自定义UI===========================================================
   */
}

void CustomLcdDisplay::updateArc(int value) { 
  DisplayLockGuard lock(this);
  lv_arc_set_value(arc, value);
 }

void CustomLcdDisplay::updateTimeLabel(const char *text) {
  DisplayLockGuard lock(this);
  lv_label_set_text(time_label, text);
}

void CustomLcdDisplay::updateArcAndLabel(int value, const char *text) {
  DisplayLockGuard lock(this);
  updateArc(value);
  updateTimeLabel(text);
}
